//
//  RCUserStatus.swift
//  RC-微博0305
//
//  Created by 任淳 on 16/3/10.
//  Copyright © 2016年 ReverChun. All rights reserved.
//

import UIKit
import AFNetworking

class RCUserStatus: NSObject {
    //微博创建时间
    var created_at:String?
    //微博ID  Int 和 OC 中的 NSInteger 是一样的  在OC中 需要使用 long long
    //NSInteger 在32机型上 默认的整形数据的长度 是32位的
    // 在64机型上 默认的整形数据的长度 是64位的
    var id:Int64 = 0
    
    var user:RCStatusUser?
    
    //微博正文
    var text: String?
    //微博来源
    var source: String?
    
    //转发微博的数据模型
    var retweeted_status:RCUserStatus?
    
    //发的图片的urlstring的数组
    var pic_urls:[[String:String]]? {
        didSet {
            
            guard let picArr = pic_urls else {
            //如果是空的 就不赋值
                return
            }
            
            //必须要实例化 imageUrl只是创建了 但是还没有实例化
            imageUrl = [NSURL]()
            for dic in picArr {
                //拿出url字符串 转换成NSURL 并存进数组
                let str = dic["thumbnail_pic"]
//                把url字符串中的thumbnail 换成large 网不好 所以没换
//                let largeStr = str?.stringByReplacingOccurrencesOfString("thumbnail", withString: "thumbnail")
                //相信后端给定的 第一个 '!' urlString  一定存在
                //第二个 '!' 相信后端给定的url一定可以得到NSURL对象
                let url = NSURL(string: str!)!
                imageUrl?.append(url)
            }
       }
   }
    
    
    //创建一个存储图片url的数组
    var imageUrl:[NSURL]?
    
    
    
    //字典转模型的方法
    init(dic:[String : AnyObject]) {
        
        super.init()
        
        setValuesForKeysWithDictionary(dic)
        
    }

    //user是个字典  有这个字典给user模型赋值
    override func setValue(value: AnyObject?, forKey key: String) {
        
        if key == "user" {
            guard let dict = value as? [String : AnyObject] else {
                print("格式错误")
               return
            }
            //给模型赋值
            user = RCStatusUser(dic: dict)
            //必须要写return
            return
        }
        
        
        if key == "retweeted_status" {
            //判断一下 可不可以转换成字典类型的数组
            guard let dic = value as? [String : AnyObject] else {
                print("格式错误")
                return
            }
            
            retweeted_status = RCUserStatus(dic: dic)
            //必须return 不然没效果
            return
        }
        
        super.setValue(value, forKey: key)
    }
    

    //过滤
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {}

    //网络获取信息
    class func loadUserStatus(since_id:Int64, max_id:Int64,finish:(array:[RCUserStatus]?)->()) {
        
        
        guard let token = RCUserModel.sharedUserModel.access_token else {
            
            return
        }
        
        let str = "https://api.weibo.com/2/statuses/home_timeline.json"
        var parameters = ["access_token":token]
        if since_id > 0 {
            //把since_id作为一个参数拼接到请求中
            parameters["since_id"] = "\(since_id)"
        }
        //如果不传入max_id 每次加载的数据都一样 每次刷新都是再加载一次一样的数据20条
        if max_id > 0 {
            //把max_id作为一个参数拼接到请求中 max_id要减去1 不然会有一条重复的数据
            parameters["max_id"] = "\(max_id - 1)"
        }
        
        let manager = AFHTTPSessionManager()
        
        manager.GET(str, parameters:parameters , progress: nil, success: { (_, result) -> Void in
            //成功之后获得的数据
//            print(result)
            
            guard let dic = result as? [String :AnyObject] else {
                
                print("数据格式错误")
                return
            }
            guard let array = dic["statuses"] as? [[String :AnyObject]] else {
                
                print("数据格式错误")
                return
            }
            
            //进行字典转模型 obj是每个模型对应的字典
            var tmpArr = [RCUserStatus]()
            
            for obj in array {
                
                let model = RCUserStatus(dic: obj)
                
                tmpArr.append(model)
            }
            //把存好模型的数组返回给控制器
            finish(array: tmpArr)
//            print(tmpArr)
            }) { (_, error) -> Void in
                
        }
        
    }
    
    
    
}
